//package com.zyf.cloud.common.utils;
//
//import com.google.common.base.Joiner;
//import org.apache.commons.lang.StringUtils;
//import org.springframework.data.redis.core.StringRedisTemplate;
//
//import java.text.NumberFormat;
//import java.time.LocalDate;
//import java.time.ZoneId;
//import java.time.format.DateTimeFormatter;
//import java.util.Date;
//import java.util.Objects;
//import java.util.concurrent.TimeUnit;
//
///**
// * 缓存数据工具类
// * chengzy.
// */
//public class CacheDataUtils {
//    /**
//     * 默认失效时间.
//     */
//    private final static Long DEFAULR_EXPIRE = 300L;
//    private static  final Joiner CACHE_KEY_JOINER = Joiner.on(":");
//    private static StringRedisTemplate stringRedisTemplate = null;
//    private static final String CODE_SEQUENCE = "CODE:SEQUENCE:";
//
//
//
//    /**
//     * 生成业务编号.
//     * @param len 流水长度(不含前面的yyyyMMdd)
//     * @param type 业务类型
//     * @return 业务编号
//     */
//    public static String generateSequence(final Integer len, final String type) {
//        return generateSequence(len, type, "yyyyMMdd");
//    }
//
//    /**
//     * 生成业务编号.
//     * @param len 流水长度(不含前面的yyyyMMdd)
//     * @param type 业务类型
//     * @param dataFormat 时间格式
//     * @return 业务编号
//     */
//    public static String generateSequence(final Integer len, final String type,final String dataFormat) {
//        if (len == null || len <= 0 || StringUtils.isBlank(type)) {
//            return null;
//        }
//        if (null == stringRedisTemplate) {
//            stringRedisTemplate = (StringRedisTemplate) ApplicationContextProvider.getBean("stringRedisTemplate");
//        }
//        StringBuilder maxStr = new StringBuilder();
//        for (int i = 0; i < len; i++) {
//            maxStr.append("9");
//        }
//        long max = Long.parseLong(maxStr.toString());
//        ZoneId zoneId = ZoneId.systemDefault();
//        final String today = LocalDate.now(zoneId).format(DateTimeFormatter.ofPattern(dataFormat));
//        final Date expireTime = Date.from(LocalDate.now(zoneId).plusDays(1).atStartOfDay(zoneId).toInstant());
//
//        final String key = CODE_SEQUENCE  + type + today;
//        final String serialStr = stringRedisTemplate.opsForValue().get(key);
//        Integer serial;
//        if (serialStr == null) {
//            serial = 1;
//        } else {
//            serial = Integer.parseInt(stringRedisTemplate.opsForValue().get(key)) + 1;
//            if (Objects.equals(serial, max)) {
//                serial = 1;
//            }
//        }
//        stringRedisTemplate.opsForValue().set(key, String.valueOf(serial));
//        stringRedisTemplate.expireAt(key, expireTime);
//        NumberFormat nf = NumberFormat.getInstance();
//        nf.setGroupingUsed(false);
//        nf.setMaximumIntegerDigits(len);
//        nf.setMinimumIntegerDigits(len);
//        if (String.valueOf(serial).length() < len) {
//            return today + nf.format(serial);
//        }
//        return type + today + String.valueOf(serial);
//    }
//
//    /**
//     * 上锁.
//     * @param key
//     * @return
//     */
//    public static Boolean locked(final String key) {
//        if (null == stringRedisTemplate) {
//            stringRedisTemplate = (StringRedisTemplate) ApplicationContextProvider.getBean("stringRedisTemplate");
//        }
//        final Object value = stringRedisTemplate.opsForValue().get(key);
//        if (null == value) {
//            stringRedisTemplate.opsForValue().set(key, "1", DEFAULR_EXPIRE, TimeUnit.SECONDS);
//            return true;
//        } else {
//            return false;
//        }
//    }
//
//    /**
//     * 解锁.
//     * @param key
//     */
//    public static void releaseLock(final String key) {
//        if (null == stringRedisTemplate) {
//            stringRedisTemplate = (StringRedisTemplate) ApplicationContextProvider.getBean("stringRedisTemplate2");
//        }
//        if (null != stringRedisTemplate.opsForValue().get(key)) {
//            stringRedisTemplate.delete(key);
//        }
//    }
//}
